/*
 * test.c
 *
 *  Created on: Jul 20, 2011
 *      Author: marco
 */


#include <stdio.h>
#include <stdlib.h>

#include <errno.h>
#include "dgraph.h"
#include "shortestpath.h"

/** nodi primo grafo di test */
static char* citta[] = {
    "PISA",
    "LUCCA",
    "LIVORNO",
    "LA SPEZIA",
    "AREZZO",
    "PRATO",
    "FIRENZE",
    NULL,
};

/** archi primo grafo di test */
static char* strade[] = {
  "PRATO:FIRENZE:24.9",
  "PISA:LUCCA:24.8",
  "LUCCA:PISA:24.8",
  "PISA:LIVORNO:22.3",
  "LIVORNO:PISA:22.3",
  "LA SPEZIA:PISA:80.0",
  "PISA:LA SPEZIA:80.0",
  "FIRENZE:AREZZO:77.9",
  "AREZZO:FIRENZE:77.9",
  "PRATO:LUCCA:57.9",
  "LUCCA:PRATO:57.9",
  "FIRENZE:PRATO:24.9",
  NULL,
};

/** main function */
int main (void) {


/* grafo di test */
graph_t *gmap;
/* numero citta' nel primo grafo di test */
int n_citta;
FILE* fnode, *farc;
int i;
int j;
int x;

char** p;
double * dist=NULL;
unsigned int * prec=NULL;


for(p=citta,i=0; *p!=NULL; p++,i++);
/* i e' il numero delle citta */
n_citta = i;
gmap = new_graph(n_citta,citta);

/* inseriamo gli archi in strade */
for(p=strade; *p!=NULL; p++){
  if (  add_edge(gmap,*p) == -1 ) {
    fprintf(stderr,"adding edge --%s--",*p);
    perror(" ");
    exit(EXIT_FAILURE);
  }
}

/* invoca shortest path (corretto) su tutti i nodi */
//for (i = 0; i < gmap->size ;i++) {
//
//  if ( ( dist = dijkstra(gmap,i,NULL) ) == NULL ) {
//    perror("dijkstra 2");
//    exit(EXIT_FAILURE);
//  }
//  x = i;
//  fprintf(stdout,"dist %d ::",x);
//  for(j=0;j<gmap->size;j++){
//    if ( dist[j] != INFINITY) fprintf(stdout," %6.2f ",dist[j]);
//    else fprintf(stdout,"  INFIN ");
//  }
//  putchar('\n');
//
//}

dist = dijkstra(gmap,0,NULL);
for(j=0;j<gmap->size;j++){
  if ( dist[j] != INFINITY) fprintf(stdout," %6.2f ",dist[j]);
  else fprintf(stdout,"  INFIN ");
}
putchar('\n');


return 0;

}
//static void stampadist (graph_t* g, int n, double* dist) {
//  int i;
//
//  if ( g == NULL || dist == NULL || n >= g -> size ) {
//    fprintf(stderr,"stampadist: Parametri non validi.\n");
//    return;
//  }
//  fprintf(stdout,"dist %d ::",n);
//  for(i=0;i<g->size;i++){
//    if ( dist[i] != INFINITY) fprintf(stdout," %6.2f ",dist[i]);
//    else fprintf(stdout,"  INFIN ");
//  }
//  putchar('\n');
//}

